\documentclass{article}
\usepackage{polski}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage[usenames,dvipsnames]{color} % For colors and names
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{tabularx}
\title{Laboratorium Rozpoznawania Obrazów \\ ćwiczenie 7: poprawa jakości rozpoznawania } % Title


\textwidth = 400pt
\oddsidemargin = 30pt
\hyphenpenalty = 1000

\author{Tomasz \textsc{Bawej}} % Author name

\definecolor{mygrey}{gray}{.96} % Light Grey
\lstset{language=Verilog, tabsize=3, backgroundcolor=\color{mygrey}, basicstyle=\small \ttfamily, commentstyle=\color{BrickRed}}
\lstset{ 
	language=[ISO]C++,              % choose the language of the code ("language=Verilog" is popular as well)
   tabsize=3,							  % sets the size of the tabs in spaces (1 Tab is replaced with 3 spaces)
	basicstyle=\scriptsize,               % the size of the fonts that are used for the code
	numbers=left,                   % where to put the line-numbers
	numberstyle=\scriptsize,              % the size of the fonts that are used for the line-numbers
	stepnumber=2,                   % the step between two line-numbers. If it's 1 each line will be numbered
	numbersep=5pt,                  % how far the line-numbers are from the code
	backgroundcolor=\color{mygrey}, % choose the background color. You must add \usepackage{color}
	%showspaces=false,              % show spaces adding particular underscores
	%showstringspaces=false,        % underline spaces within strings
	%showtabs=false,                % show tabs within strings adding particular underscores
	frame=single,	                 % adds a frame around the code
	tabsize=3,	                    % sets default tabsize to 2 spaces
	captionpos=b,                   % sets the caption-position to bottom
	breaklines=true,                % sets automatic line breaking
	breakatwhitespace=false,        % sets if automatic breaks should only happen at whitespace
	%escapeinside={\%*}{*)},        % if you want to add a comment within your code
	commentstyle=\color{BrickRed},   % sets the comment style
	columns=fixed
}

\begin{document}

\maketitle % Insert the title, author and date

\setlength\parindent{0pt} % Removes all indentation from paragraphs

\renewcommand{\labelenumi}{\alph{enumi}.} % Make numbering in the enumerate environment by letter rather than number (e.g. section 6)

\section{Uruchamianie implementacji}
Poszczególne z omawianych poniżej rozwiązań uruchomić można odpowiednio poleceniami:
\begin{itemize}
	\item \texttt{source "initHandicap.m"} - głosowanie z miarą wiarygodności oraz handicapem, 10 iteracji treningów i weryfikacji z użyciem losowych podziałów zbioru danych na połowy
	\item \texttt{source "initHandicapLeaveOneOut.m"} - głosowanie z miarą wiarygodności oraz handicapem testowane metodą walidacji krzyżowej typu \textit{leave one out}
	\item \texttt{source "initBayesianMeta.m"} - uczenie i odpytywanie metaklasyfikatora Bayesowskiego przeprowadzane w czterech iteracjach: jednej dla całego zbioru danych oraz trzech dla losowych podziałów zbioru na 50\%-podzbiory: treningowy i testowy	
\end{itemize}

\section{Opis metod składania wyników pojedynczych klasyfikatorów}

\subsection{Metaklasyfikator Bayesowski}
Metaklasyfikator zaimplementowany został zgodnie z informacjami zawartymi w materiałach wykładowych. Proces "uczenia" realizuje funkcja \texttt{getConfusionMatrices}, podczas gdy odpytywanie z wyznaczaniem wartości funkcji ufności zaimplementowane zostało w funkcji \texttt{bayesianMeta}. Wartość funkcji ufności jest dla każdej klasyfikowanej próbki obliczana ponownie, co stanowi spory mankament wydajnościowy, uzasadniony jednak w~pewnym stopniu rozczarowującymi wynikami samej klasyfikacji. W obliczu tych, optymalizacja samej procedury stała się raczej bezcelowa.

\subsection{Naiwne głosowanie z handicapem}
Głosowanie to różni się od głosowania większościowego wagami głosów, które ustalane są~na~podstawie macierzy wiarygodności klasyfikatorów i klas. Wiersze tej macierzy odpowiadają poszczególnym cyfrom, kolumny zaś klasyfikatorom. Na przecięciu wiersza reprezentującego cyfrę $d$ oraz klasyfikator $k$ znajduje się wartość funkcji \textit{F} dla klasyfikatora $k$ wyznaczana względem cyfry $d$. Wartość ta jest miarą zdolności poprawnego odróżniania cyfr $d$ od pozostałych i jest określona wzorem:
$$F=2*\frac{specificity*sensitivity}{specificity+sensitivity}$$
gdzie:
$$specificity=\frac{TN}{TN + FP}$$
$$sensitivity=\frac{TP}{TP + FN}$$
oraz $TN$, $TP$, $FN$ i $FP$ odpowiadają kolejno współczynnikom: \textit{true negative}, \textit{true positive}, \textit{false negative} i \textit{false positive}. 

Pomimo prób zastosowania rozmaitych systemów ważenia głosów (w tym np. przydzielania kolejno punktów w liczbie 5, 4, 3, 2 i 1 odpowiedziom wraz z ich malejącą wiarygodnością czy przydzielania im liczby punktów równej sumie wiarygodności "pokonanych" odpowiedzi), ostatecznie zastosowano ważenie głosów wprost wartościami zapisanymi w macierzy wiarygodności. Naturalnie, wskazanie tej samej odpowiedzi przez więcej niż jeden klasyfikator skutkuje przypisaniem jej punktów pochodzących od wszystkich tych klasyfikatorów. Poziom ufności metaklasyfikatora dla danej odpowiedzi określony jest przy tym jako stosunek wiarygodności wybranej odpowiedzi do sumy wiarygodności odpowiedzi zgłoszonych przez poszczególne klasyfikatory.
Dodatkowym parametrem jest \texttt{handicap}, który określa minimalną przewagę zwycięzcy nad pozostałymi odpowiedziami, aby za wiarygodny uznać wynik wygrywającego klasyfikatora.

\section{Opis algorytmu uczenia metaklasyfikatora}

\subsection{Metaklasyfikator Bayesowski}
Uczenie metaklasyfikatora sprowadza się~do~wyznaczenia macierzy pomyłek wszystkich klasyfikatorów składowych, aby następnie możliwym było obliczenie wartości funkcji ufności dla poszczególnych odpowiedzi. Ta~druga czynność wykonywana jest jednak podczas samej klasyfikacji próbki, gdyż słabe wyniki klasyfikatora udaremniły plany jego optymalizacji.
\subsection{Głosowanie z wiarygodnością i handicapem}
Wiarygodność każdego z klasyfikatorów pod~warunkiem wskazania przezeń określonej cyfry obliczana jest zgodnie z~założeniami przytoczonymi w punkcie nt. sposobu głosowania tego typu metaklasyfikatora. Macierz wiarygodności wyznaczana jest w metodzie \texttt{getPerformanceMatrix}.
\section{Jakość rozpoznawania cyfr}

\subsection{Metaklasyfikator Bayesowski}
Niestety, ten sposób klasyfikacji obiecujące wyniki dał jedynie w przypadku trenowania i~odpytywania metaklasyfikatora na pełnym zbiorze danych, kiedy to prezentowały się one następująco: poprawne - 98.73\%, odrzucone: 0.18\%, błędne: 01.09\%.
Tymczasem wyniki dla losowych podziałów zbioru trenującego czy nawet metody \textit{leave one out} plasowały się już w~okolicach: 98.41\% - 0.16\% - 1.43\%.
Prawdopodobnie było to niestety do przewidzenia, zważywszy na liczbę elementów leżących poza głównymi przekątnymi poszczególnych macierzy pomyłek.

\subsection{Głosowanie z wiarygodnością i handicapem}
W przypadku tej metody wyniki od początku, kiedy jeszcze nie stosowano handicapu, oscylowały w granicach wyników rozwiązań referencyjnych. Aby więc uzyskać wiarygodne i powtarzalne wyniki, zastosowano walidację krzyżową z 10000 iteracji i pojedynczym, każdorazowo innym, egzemplarzem testowym. Dla poziomu ufności rzędu $0.44$ wynik okazał się być identyczny, jak dla rozwiązania referencyjnego. W rozpaczliwym poszukiwaniu elementu, który mógłby odrobinę poprawić jakość klasyfikacji, wprowadzono element \texttt{handicapu}, który dla wartości $0.0078$ pozwolił uzyskać odrobinę lepsze wyniki: 98,55\% poprawnie sklasyfikowanych próbek, 0.26\% odrzuconych, 1,19\% błędnie sklasyfikowanych. 
\end{document}
